<?php
/**
* This script illustrates how to use function "raiseError()".
*/

// Set the search path.
ini_set('include_path', $_SERVER['DOCUMENT_ROOT'].'/PEAR');

require_once('Error.php');

// it is possible to use directly in the script.
// after call, raises warning in line 13
raiseError('Test error, raises directly in the script', E_USER_WARNING);

// it is possible to use insidethe function.
function Simple()
{
    raiseError('Test error, raises inside the function', E_USER_WARNING);
}

// after call function, raises warning inline 22.
Simple();

// it is possible to use inside a class with intermediate function.
class SimpleClass
{
    function SimpleClass()
    {
        $this->SimpleException();
    }
    
    function SimpleException()
    {
        /**
        * The constructor of a class uses this method for check. That the debug
        * information was displayed not for the constructor, and for function
        * calling it, we specify callLevel = 3. If method called directly, we
        * specify callLevel = CLASS_LEVEL.
        */
        $callLevel = (getCallerMethod() == 'simpleclass') ? 3 : CLASS_LEVEL;
        $this->raiseError('Test Exception', E_USER_WARNING, $callLevel);
    }
    
    /**
    * That the debug information was displayed for caller function, the
    * parameter $callLevel is specified CLASS_LEVEL.
    */
    function raiseError($message, $type, $callLevel = CLASS_LEVEL)
    {
        $message = 'SimpleClass error: '.$message;
        raiseError($message, $type, $callLevel);
    }
}

// after call constructor, raises warning in line 56.
$simple = new SimpleClass;

// after call method, raises warning in line 59.
$simple->SimpleException();

// it is possible to use user-defined error handler.
function handleError($message, $type, $file, $line)
{
    print '<br>Called user-defined error handler';
    exit("<br>Error: $message in $file on line $line");
}

// Other example of error handling with use of class PEAR.
class PEAR_Class extends PEAR
{
    function PEAR_Class()
    {
        $this->PEAR('Class_Error');
    }
    
    function SimpleException()
    {
        $this->raiseError('Test Exception');
    }
    
    function runSimpleException()
    {
        $this->SimpleException();
    }
}

class Class_Error extends Error
{
    var $error_message_prefix = 'PEAR_Class error: ';
    var $skipClass = 'pear_class';
    
    function Class_Error($message = 'unknown error', $code = null,
                         $mode = null, $options = null, $userinfo = null)
    {
        $this->Error($message, $code, $mode, $options, $userinfo);
    }
}

$simple = new PEAR_Class;

// after call method, raises error in line 102
$simple->SimpleException();

// after call method, raises error in line 105
$simple->runSimpleException();

// sets design mode
$GLOBALS['_Design_Mode'] = true;

// after this call, raises error in line 83
$simple->runSimpleException();

// sets a user-defined error handler function.
setErrorHandler('handleError');

$simple->SimpleException();

?>